package com.esunny.resourcevisualization.service;

import com.esunny.resourcevisualization.domain.request.ProcessDealDto;
import com.esunny.resourcevisualization.domain.response.ReturnStructure;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @version 1.0.0.0
 * @InterfaceName ProcessService
 * @Description 流程处理逻辑接口
 * @Author baochencong
 * @Date 2020/11/24 14:12
 */
public interface ProcessService {

    /**
     * 提交申请
     *
     * @param applyId 申请信息id
     */
    ReturnStructure submitApply(int applyId);

    /**
     * 取消申请
     *
     * @param applyId 申请信息id
     */
    ReturnStructure cancelApply(int applyId);

    /**
     * 审批申请
     *
     * @param applyId 申请id
     * @param agree   是否同意申请
     * @param remark  备注
     */
    ReturnStructure auditApply(int applyId, boolean agree, String remark);

    /**
     * 分配资源
     *
     * @param processDealDto 分配信息
     */
    ReturnStructure assignResource(ProcessDealDto processDealDto);

    /**
     * 分配资源阶段驳回申请
     *
     * @param processDealDto 驳回信息
     */
    ReturnStructure rebackApply(ProcessDealDto processDealDto);

    /**
     * 用户归还资源
     *
     * @param applyId 申请id
     */
    ReturnStructure returnResource(int applyId);

    /**
     * 管理员释放资源
     *
     * @param applyId 申请id
     */
    ReturnStructure freeResource(int applyId);

    /**
     * 提前释放资源
     *
     * @param applyId     申请id
     * @param adminRemark 管理员备注
     * @return 操作结果
     */
    ReturnStructure advanceFreeResource(int applyId, String adminRemark);

    /**
     * 通过审批人获取待执行任务流程实例ID列表
     *
     * @return 待执行任务流程实例ID列表
     */
    List<String> getProcessInstanceIdListByAuditor();

    ReturnStructure viewProcessImage(String processInstanceId, HttpServletResponse response);

}
